#!/usr/local/bin/python3
# -*- coding: utf-8 -*-

"""
@File    : imooc_ginger.py
@Author  : lepal
@Time    : 2024-02-28 11:38
"""
from werkzeug.exceptions import HTTPException

from app.app import create_app
from app.libs.error import APIException
from app.libs.error_code import ServerError

app = create_app()
# register_blueprints(app)


# 捕获全局异常，然后细分具体异常处理
@app.errorhandler(Exception)
def framework_error(e):
    print("@app.errorhandler捕获到报错-》",e)
    if isinstance(e, APIException):  # 如果是已知异常
        return e
    if isinstance(e, HTTPException):  # 如果是httpException，转换成apiException的格式， 比如用get请求测试post接口，或用错误的json格式 缺少引号就会出现这种错误
        code = e.code
        msg = e.description
        error_code = 1007
        return APIException(msg, code, error_code)
    else:  # 如果是未知异常
        # 调试模式
        # log  一般这种错误会记录日志
        if not app.config['DEBUG']:  # 如果非调试模式可以返回概要信息，
            # return ServerError()
            return ServerError(msg=str(e))
        else: # 但如果是调试模式 我们需要看到具体的错误信息，就可以直接返回原版的错误信息
            raise e

if __name__ == '__main__':
    with app.app_context():
        app.run(host='0.0.0.0', debug=True)
